/**
 * 数组的扁平化
 */
let arr = [1, [2, [3, 4]]];

// 1、递归实现数组扁平化
function flatten(arr) {
  let result = [];
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      result = result.concat(flatten(arr[i]));
    } else {
      result.push(arr[i]);
    }
  }
  return result;
}

console.log(flatten(arr));

// 2、使用reduce实现数组扁平化
function flatten1(arr) {
  return arr.reduce((prev, next) => {
    return prev.concat(Array.isArray(next) ? flatten(next) : next);
  }, []);
}

console.log(flatten1(arr));

// 3、使用ES6的扩展运算符实现数组扁平化
function flatten2(arr) {
  while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
  }
  return arr;
}

console.log(flatten2(arr));

// 4、使用toString实现数组扁平化
function flatten3(arr) {
  return arr.toString().split(',').map(item => Number(item));
}

console.log(flatten3(arr));

// 5、使用join实现数组扁平化
function flatten4(arr) {
  return arr.join(',').split(',').map(item => Number(item));
}

console.log(flatten4(arr));

// 6、使用JSON.stringify实现数组扁平化
function flatten5(arr) {
  return JSON.stringify(arr).replace(/\[|\]/g, '').split(',').map(item => Number(item));
}

console.log(flatten5(arr));

// 7、使用ES6的Set数据结构实现数组扁平化
function flatten6(arr) {
  return Array.from(new Set(arr.flat(Infinity)));
}

console.log(flatten6(arr));


// 8、使用ES6的flat方法实现数组扁平化
function flatten8(arr) {
  return arr.flat(Infinity);
}

console.log(flatten8(arr));

